package com.xxx.springboot.util;

import java.util.Arrays;
import java.util.Random;

import org.apache.commons.lang3.StringUtils;

/**
 * 数字相关工具类
 */
public class NumberUtil {

    private NumberUtil() {
    }

    /**
     * 随机指定范围内N个不重复的数
     * 最简单最基本的方法
     * 
     * @param min
     *            指定范围最小值
     * @param max
     *            指定范围最大值
     * @param n
     *            随机数个数
     * @param isOrder
     *            是否需要排序
     */
    public static int[] getRandomNumber(int min, int max, int n, boolean isOrder) {
        if (n > (max - min + 1) || max < min) {
            return null;
        }
        int[] result = new int[n];
        int count = 0;
        while (count < n) {
            int num = (int) (Math.random() * (max - min)) + min;
            boolean flag = true;
            for (int j = 0; j < n; j++) {
                if (num == result[j]) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                result[count] = num;
                count++;
            }
        }

        if (isOrder) {
            Arrays.sort(result);
        }
        return result;
    }
    
    /**  
     * 获取指定范围内随机数
     * 最简单最基本的方法  
     * @param min 指定范围最小值  
     * @param max 指定范围最大值  
     */    
    public static int getRandomNumberOfRange(int min, int max){ 
    	//创建Random类对象
        Random random = new Random();
        
        //产生随机数
        int number = random.nextInt(max - min + 1) + min;
        if(number<=0) {
        	number = min;
        }
        
        return number;
    }

    /**
     * 左补齐字符串
     * 
     * @param srcStr
     *            原始字符串
     * @param totalLen
     *            补位后的字符串长度
     * @return
     */
    public static String leftPadZero(String srcStr, int totalLen) {
        String result = srcStr;
        if (StringUtils.isEmpty(srcStr)) {
            return result;
        }

        if (srcStr.length() < totalLen) {
            result = StringUtils.leftPad(srcStr, totalLen, "0");
        }

        return result;
    }

    /**
     * 左去掉字符串0
     * 
     * @param srcStr
     *            原始字符串
     * @return
     */
    public static String removeLeftZero(String srcStr) {
        String result = srcStr;
        if (StringUtils.isEmpty(srcStr)) {
            return result;
        }

        return result.replaceFirst("^0*", "");
    }

    public static int convertInt(String v, int defaultValue) {
        try {
            return Integer.parseInt(v);
        } catch (Exception e) {
            return defaultValue;
        }
    }

    public static long convertLong(String v, long defaultValue) {
        try {
            return Long.parseLong(v);
        } catch (Exception e) {
            return defaultValue;
        }
    }
    
    public static Long convertLong(String v, Long defaultValue) {
        try {
            return Long.parseLong(v);
        } catch (Exception e) {
            return defaultValue;
        }
    }

    public static double convertDouble(String v, double defaultValue) {
        try {
            return Double.parseDouble(v);
        } catch (Exception e) {
            return defaultValue;
        }
    }

}
